﻿// Gateway.Api 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
// 
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
// 
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！
using Aurora.AI.Domain.Domain;
using Aurora.AI.SqlSugar.Framework;
using SqlSugar;

namespace Aurora.AI.Domain.DataAccess.Mapping;

/// <summary>
///  mapping
/// </summary>
public class ChatLoggerMapping : IEntityMapping<ChatLogger>
{
    public void EntityServiceMapping(EntityColumnable<ChatLogger> entityColumnInfo)
    {
        entityColumnInfo
            .UpdateProperty(it => it.Id, it =>
            {
                it.IsPrimarykey = true;
                it.DataType = "varchar(50)";
                it.ColumnDescription = "主键标识";
            }).UpdateProperty(it => it.Type, it =>
            {
                it.DataType = "int";
                it.ColumnDescription = "聊天日志类型 1 消费 2 重置 3系统";
                it.DefaultValue = "1";
            }).UpdateProperty(it => it.Content, it =>
            {
                it.DataType = "varchar(5000)";
                it.ColumnDescription = "日志内容";
                it.IsNullable = true;
            }).UpdateProperty(it => it.PromptTokens, it =>
            {
                it.DataType = "int";
                it.ColumnDescription = "请求Token";
                it.DefaultValue = "0";
            })
            .UpdateProperty(it => it.CompletionTokens, it =>
            {
                it.DataType = "int";
                it.ColumnDescription = "完成Token";
                it.DefaultValue = "0";
            })
            .UpdateProperty(it => it.Quota, it =>
            {
                it.DataType = "int";
                it.ColumnDescription = "消费额度";
                it.DefaultValue = "0";
            })
            .UpdateProperty(it => it.ModelName, it =>
            {
                it.DataType = "varchar(200)";
                it.ColumnDescription = "模型";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.TokenName, it =>
            {
                it.DataType = "varchar(200)";
                it.ColumnDescription = "token名称";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.UserName, it =>
            {
                it.DataType = "varchar(200)";
                it.ColumnDescription = "UserName";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.UserId, it =>
            {
                it.DataType = "varchar(50)";
                it.ColumnDescription = "用户标识";
                it.IsNullable = false;
            })
            .UpdateProperty(it => it.ChannelId, it =>
            {
                it.DataType = "varchar(50)";
                it.ColumnDescription = "渠道Id";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.ChannelName, it =>
            {
                it.DataType = "varchar(200)";
                it.ColumnDescription = "渠道名称";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.IP, it =>
            {
                it.DataType = "varchar(200)";
                it.ColumnDescription = "IP";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.UserAgent, it =>
            {
                it.DataType = "varchar(200)";
                it.ColumnDescription = "UserAgent";
                it.IsNullable = true;
            })

            .UpdateProperty(it => it.Creator, it =>
            {
                it.DataType = "varchar(50)";
                it.ColumnDescription = "创建人";
                it.IsNullable = true;
            }).UpdateProperty(it => it.CreationTime, it =>
            {
                it.DataType = "datetime";
                it.ColumnDescription = "创建时间";
                it.IsNullable = true;
            }).UpdateProperty(it => it.Modifier, it =>
            {
                it.DataType = "varchar(50)";
                it.ColumnDescription = "修改人";
                it.IsNullable = true;
            }).UpdateProperty(it => it.ModificationTime, it =>
            {
                it.DataType = "datetime";
                it.ColumnDescription = "修改时间";
                it.IsNullable = true;
            }).UpdateProperty(it => it.IsDeleted, it =>
            {
                it.DataType = "bit";
                it.ColumnDescription = "是否删除 0 未删除 1已删除";
                it.DefaultValue = "0";
            });
    }

    public void EntityNameServiceMapping(EntityInfo entityInfo)
    {
        entityInfo.DbTableName = MappingConstant.TableNamePrefix + "chat-logger";
        entityInfo.TableDescription = "日志";
    }
}